package br.com.estevam.sisfin.pages.managers;

import java.util.Date;

import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.PageActivationContext;
import org.apache.tapestry5.beaneditor.BeanModel;
import org.apache.tapestry5.corelib.components.BeanEditForm;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.BeanModelSource;
import org.hibernate.exception.ConstraintViolationException;

import br.com.estevam.sisfin.base.DefaultPage;
import br.com.estevam.sisfin.daos.interfaces.UsuarioDAO;
import br.com.estevam.sisfin.entities.Usuario;
import br.com.estevam.sisfin.tools.Encrypt;

public class AddEditUsuario extends DefaultPage {

	@PageActivationContext
	private Usuario usuario;

	@Inject
	private Messages messages;

	@Inject
	private BeanModelSource model;

	@Inject
	private UsuarioDAO usuarioDAO;

	@Component
	private BeanEditForm beanEditForm;

	public BeanModel<Usuario> getModel() {
		BeanModel<Usuario> beanModel = model.createEditModel(Usuario.class, messages);

		beanModel.exclude("id", "dateNew");

		if(usuario != null && usuario.getId() != 0){
			beanModel.exclude("password");
		}

		return beanModel;
	}

	Class<Index> onSuccess(){
		try {
			if(usuario != null){
				if(usuario.getId() == 0){
					usuario.setPassword(Encrypt.encryptMD5(usuario.getPassword()));
					usuario.setDateNew(new Date());
				}
				usuarioDAO.addOrUpdate(usuario);
				return Index.class;
			}
		} catch (ConstraintViolationException e){
			beanEditForm.recordError("O Usuario é " + usuario.getLogin() + " ja cadastrado");
		} 
		return null;
	}
	
	public boolean isEdit(){
		return (usuario.getId() == 0 ? true : false);
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

}
